package com.sure.minion.services.base.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

/**
 * @Description 日期工具类
 * @author sure
 * @date 2015年9月29日 下午9:24:50
 */
public class DateUtil {
	
	/** 日期格式*/
	public static final String FORMAT_YYMMDD = "yyyy-MM-dd";
	
	/** 中文日期格式*/
	public static final String FORMAT_CHINESE = "yyyy年MM月dd日 HH:mm";
	
	/** 时间格式*/
	public static final String FORMAT_TIME = "yyyy-MM-dd HH:mm:ss";



	/**
	 * @Description 日期转String
	 * @param date
	 * @param format 日期格式 eg:yyyy-MM-dd HH:mm:ss
	 * @return
	 * @author sure
	 */
	public static String dateToFormatString(final Date date, final String format) {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.ENGLISH);
			return sdf.format(date).toUpperCase();

		} catch (Exception e) {
			return null;

		}

	}


	/**
	 * @Description String转日期
	 * @param string
	 * @param format 日期格式 eg:yyyy-MM-dd HH:mm:ss
	 * @return
	 * @author sure
	 */
	public static Date formatStringToDate(final String string, final String format) {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.ENGLISH);
			Date date = sdf.parse(string);
			return date;

		} catch (Exception e) {
			return null;

		}

	}

	/**
	 * @Description 增加整月
	 * @param date
	 * @param months 月数
	 * @return
	 * @author sure
	 */
	public static Date addMonths(final Date date, final int months) {
		if (date != null) {
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(date);
			calendar.add(Calendar.MONTH, months);
			return calendar.getTime();

		} else {
			return null;
		}
	}

	/**
	 * @Description 增加整年
	 * @param date
	 * @param years 年数
	 * @return
	 * @author sure
	 */
	public static Date addYears(final Date date, final int years) {
		if (date != null) {
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(date);
			calendar.add(Calendar.YEAR, years);
			return calendar.getTime();

		} else {
			return null;
		}
	}

	/**
	 * @Description 增加整天
	 * @param date
	 * @param days 天数
	 * @return
	 * @author sure
	 */
	public static Date addDays(final Date date, final int days) {
		if (date != null) {
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(date);
			calendar.add(Calendar.DATE, days);
			return calendar.getTime();

		} else {
			return null;
		}
	}

	/**
	 * @Description 增加分钟数
	 * @param date
	 * @param minutes 分钟数
	 * @return
	 * @author sure
	 */
	public static Date addMinutes(final Date date, final int minutes) {

		if (date != null) {
			Calendar calendar = new GregorianCalendar();
			calendar.setTime(date);
			calendar.add(Calendar.MINUTE, minutes);
			return calendar.getTime();
		} else {
			return null;
		}
	}


	/**
	 * @Description 计算两日期相差天数
	 * @param begin 开始日期
	 * @param end 结束日期
	 * @return
	 * @author sure
	 */
	public static int daysBetween(final Date begin, final Date end) {
		return (int) ((end.getTime() - begin.getTime()) / (3600 * 24 * 1000));
	}

}
